<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    /*
    构造函数通过原型分配的函数是所有对象共享的
    JavaScript规定，每一个构造函数都有一个prototype属性，指向另一个对象，称为原型对象
    原型对象上可以挂载函数、对象实例化不会多次创建原型上函数、节约内存
    可以把不变的方法直接定义在prototype对象上，这样所有的对象实例就可以共享这些方法
    构造函数和原型对象中的this指向实例化对象 
    */
    /*定义一个Person构造函数 */
    function Person(name, age, gender) {
      this.name = name
      this.age = age
      this.gender = gender
    }

    /* 往Person的显式原型prototype上添加方法，实例对象都会沿着隐式原型__proto__找到 */
    Person.prototype.getThis = function () {
      console.log(this);
    }

    /* 实例化Person构造函数 */
    const object1 = new Person("陶品奇", 22, "男")
    console.log(object1);
    object1.getThis()

    const object2 = new Person("马云", 56, "男")
    console.log(object2);
    object2.getThis()
    console.log(object1.getThis() === object2.getThis());
  </script>
</body>

</html>